package com.ny.controller;

import com.ny.entity.Device;
import com.ny.entity.Devicedb;
import com.ny.entity.Result;
import com.ny.mapper.DeviceMapperdb;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Optional;


@RestController
public class DeviceControllerdb {
    @Autowired
    private DeviceMapperdb deviceMapperdb;

    // 接口：http://localhost:8081/device?name=卧室空调
    @GetMapping("/device")
    public Result getDeviceByName(@RequestParam String name) {
        return deviceMapperdb.findByDeviceName(name)
                .map(Result::success) // 找到则返回Result.success(设备信息)
                .orElse(Result.notFound("设备不存在：" + name)); // 未找到返回404
    }

    /**
     * 查询所有设备信息
     * 接口：http://localhost:8081/devicesdb
     */
    @GetMapping("/devicesdb")
    public Result getAllDevices() {
        List<Devicedb> devices = deviceMapperdb.findAll();
        return Result.success(devices);
    }

    /**
     * 查询状态为离线的设备信息
     * 接口：http://localhost:8081/offlineDevices
     * @return 状态为离线的设备列表
     */
    @GetMapping("/offlineDevices")
    public Result getOfflineDevices() {
        List<Devicedb> offlineDevices = deviceMapperdb.findByStatus(0); // 0表示离线
        return Result.success(offlineDevices);
    }

    /**
     * 查询指定时间段内且状态为离线的设备信息
     * 接口：http://localhost:8081/offlineDevicesByTime?startTime=1609459200&endTime=1640995200
     * @param startTime 开始时间戳
     * @param endTime 结束时间戳
     * @return 指定时间段内状态为离线的设备列表
     */
    @GetMapping("/offlineDevicesByTime")
    public Result getOfflineDevicesByTime(
            @RequestParam Long startTime,
            @RequestParam Long endTime) {
        List<Devicedb> offlineDevices = deviceMapperdb.findByCreateTimeBetweenAndStatus(startTime, endTime, 0);
        return Result.success(offlineDevices);
    }


    /**
     * 根据设备ID删除设备
     * 接口：http://localhost:8081/device/2 (DELETE请求)
     * @param deviceId 设备ID
     * @return 删除结果
     */
    /**
     * 根据设备ID删除设备
     * 接口：http://localhost:8081/device/2 (DELETE请求)
     * @param deviceId 设备ID
     * @return 删除结果
     */
    @DeleteMapping("/device/{deviceId}")
    public Result deleteDeviceById(@PathVariable Integer deviceId) {
        try {
            // 先检查设备是否存在
            Optional<Devicedb> device = deviceMapperdb.findByDeviceId(deviceId);
            if (device.isPresent()) {
                // 使用标准的 delete 方法
                deviceMapperdb.delete(device.get());
                return Result.success("成功删除设备，设备ID: " + deviceId);
            } else {
                return Result.notFound("未找到设备，设备ID: " + deviceId);
            }
        } catch (Exception e) {
            return Result.error("删除设备失败: " + e.getMessage());
        }
    }
}
